IF exists(SELECT * FROM dbo.sysobjects WHERE name='vakrapportMaakLeerlingXML' AND xtype='P') 
BEGIN
	DROP PROCEDURE vakrapportMaakLeerlingXML
END
GO

CREATE  PROCEDURE vakrapportMaakLeerlingXML
-- De PROCEDURE leest de records van een welbepaalde lln. uit de tabellen 'vakrapport' in 
-- en plaatst het resultaat als XML-tekst, in de tabel vakrapportXML.
  (@hetInr varchar(7),@klas varchar(5), 
	@achternaam varchar(50),@voornaam varchar(50),
	@dePeriode varchar(2),@hetJaar varchar(4))
As
set nocount on
--print 'start ' + convert(varchar,getDate(),114)

--Wis de oude gegevens
delete from vakrapportXML 
	where inschrijvingsNr = @hetINr and
	periode = @dePeriode and
	jaar = @hetJaar

--Een tijdelijke veranderlijke
declare @tekst varchar(8000)

-- En de tabel, die de XML-gegevens zal 
-- bevatten in de eerste rij, eerste kolom (T-SQL kan nl. geen text exporteren).

insert into vakrapportXML(inschrijvingsNr,klas,periode,jaar,XMLTekst)
values (@hetInr,@Klas,@dePeriode,@hetJaar,'')

-- Een pointer naar de XML-tekst:
declare @@ptrval varbinary(16)
select @@ptrval = textptr(XMLTekst) from vakrapportXML
	where inschrijvingsNr=@hetInr and 
	periode = @dePeriode and
	jaar = @hetJaar

---------------------------------------------------------------------------- 
--        De hoofdtag wordt ingevoegd
---------------------------------------------------------------------------- 

set @tekst = '<?xml version=''1.0'' encoding=''ISO-8859-1''?>'
set @tekst = @tekst + '<vakrapport iNr="' + @hetINr + '" periode="' + @dePeriode + '">' 


-- De leerlinggegevens worden ingevoegd:
set @tekst = @tekst + '<leerling>' + CHAR(13) + char(10)
		+  '<vnaam>' + @voornaam + '</vnaam>' + char(13) + char(10)
		+  '<anaam>' + @achternaam + '</anaam>' + char(13) + char(10)
		+  '<klas>' + @klas + '</klas>' + char(13) + char(10)
		+  '</leerling>' + char(13) + char(10)

updatetext vakrapportXML.XMLtekst @@ptrval null 0 @tekst
set @tekst = ''

--print 'llngegevens ' + convert(varchar,getDate(),114)
----------------------------------------------------------------------------
--       Consultatie van de tabel  'vakrapportIndividueelBerekend', 
--		'vakrapportCollectiefBerekend'  en
--		'vakrapportCommentaar'.
----------------------------------------------------------------------------

set @tekst = '<vakken>'
updatetext vakrapportXML.XMLtekst @@ptrval null 0 @tekst
set @tekst = ''

-- Een hulptabel die de vakken bevat die opgenomen zijn in de
-- tabel 'berekende gegevens'.

create table  #vakken(vak char(2) null,	
		     leraar varchar(100) null)
insert into #vakken(vak)
select distinct vib.vak from 
  vakrapportIndividueelBerekend as vib
where vib.inschrijvingsNr = @hetINr
	and vib.periode = @dePeriode

update #vakken
  set leraar = isnull(l.voornaam,'') + ' ' +  isnull(l.achternaam,'')
from #vakken as v 
  left join leraars.dbo.ambtsverdeling as a
	on v.vak = a.vakcode
  left join leraars.dbo.leraars as l
	on a.naamcode = l.naamcode
where klas = @klas

-- De cursor die door de verschillende vakken loopt.
declare @vak char(2)
declare @leraar varchar(100)
declare vakCursor cursor local for 
  select vak,leraar from #vakken
	order by vak
for read only

open vakCursor
fetch next from vakCursor into @vak,@leraar

while (@@fetch_status = 0)
begin
set @tekst = '<' + lower(@vak) + ' leraar="' + @leraar + '">'

--De veranderlijken, die de waarden uit de tabel zullen opslaan en de bijhorende cursor.
declare @code  varchar(50)
declare @cijfer varchar(5)

--print convert(varchar,getDate(),114)
--De tabel vakrapportIndividueelBerekend wordt ingelezen
declare deCursor cursor local for 
  select code,cijfer
  from vakrapportIndividueelBerekend as vib
  where inschrijvingsNr = @hetINr 
  	and vak = @Vak 
	and periode = @dePeriode
	and not code is null
for read only

open deCursor
fetch next from deCursor into @code, @cijfer
while @@fetch_status=0
begin
  if (convert(float,@cijfer) < 0)set @cijfer = ''
  set @tekst = @tekst + '<' + lower(@code) + '>' + isNull(@cijfer,'') + '</' + lower(@code) + '>' + char(13) + char(10)
  fetch next from deCursor into @code, @cijfer
end
updatetext vakrapportXML.XMLtekst @@ptrval null 0 @tekst
set @tekst=''
deallocate deCursor

--print 'individueel ' + convert(varchar,getDate(),114)

--De tabel vakrapportDetailCommentaar wordt ingelezen

declare @inhoud varchar(4000)
declare deCursor cursor local for 
  select code,tekst
  from vakrapportDetailCommentaar
  where inschrijvingsNr = @hetINr 
  	and vak = @Vak 
	and periode = @dePeriode
for read only

open deCursor
fetch next from deCursor into @code,@inhoud
while @@fetch_status=0
begin
  set @inhoud = replace(@inhoud,'&','&amp;')
  set @inhoud = replace(@inhoud,'<','&lt;')
  set @inhoud = replace(@inhoud,'>','&gt;')

  set @code = replace(@code,' ','')
  if (@inhoud <> '') set @tekst = @tekst + '<' + lower(@code) + 'com>'
                + replace(@inhoud,'$',@voornaam) 
		+ '</' + lower(@code) + 'com>' + char(13) + char(10)
 
  fetch next from deCursor into @code,@inhoud
end
updatetext vakrapportXML.XMLtekst @@ptrval null 0 @tekst
deallocate deCursor


set @tekst = ''

--De tabel vakrapportCollectiefBerekend wordt ingelezen
declare deCursor cursor local for 
  select code,isNull(cijfer,'')
  from vakrapportCollectiefBerekend
  where klas = @klas 
  	and vak = @Vak 
	and periode = @dePeriode
	and not(code is null)
for read only

open deCursor
fetch next from deCursor into @code, @cijfer
while @@fetch_status=0
begin
  if (convert(float,@cijfer) < 0)set @cijfer = ''
  set @tekst = @tekst + '<' + lower(@code) + '>' + @cijfer 
	+ '</' + lower(@code) + '>' + char(13) + char(10)
  fetch next from deCursor into @code, @cijfer
end
updatetext vakrapportXML.XMLtekst @@ptrval null 0 @tekst
deallocate deCursor
set @tekst = ''
--print 'collectief ' + convert(varchar,getDate(),114)

--De tabel vakrapportCommentaar wordt ingelezen

declare @commentaarTekst varchar(7975)

if left(@dePeriode,1) = 't'
begin
  declare deCursor cursor local for 
     select isNull(tekst,'')
     from r_trimesterVakCommentaar
     where inschrijvingsNr = @hetInr 
  	and vak = @vak 
	and periode = right(@dePeriode,1)
  for read only

  open deCursor
  fetch next from deCursor into @commentaarTekst
  while @@fetch_status=0
  begin
    set @commentaarTekst = replace(@commentaarTekst,'&','&amp;')
    set @commentaarTekst = replace(@commentaarTekst,'<','&lt;')
    set @commentaarTekst = replace(@commentaarTekst,'>','&gt;')
    set @tekst = '<commentaar>' + @commentaarTekst + '</commentaar>' + char(13) + char(10)
    fetch next from deCursor into @commentaarTekst
  end
  updatetext vakrapportXML.XMLtekst @@ptrval null 0 @tekst
  deallocate deCursor
  set @tekst = ''
end

if left(@dePeriode,1) = 'm'
begin
  declare deCursor cursor local for 
     select isNull(tekst,'')
     from r_maandVakCommentaar
     where inschrijvingsNr = @hetInr 
  	and vak = @vak 
	and periode = right(@dePeriode,1)
  for read only

  open deCursor
  fetch next from deCursor into @commentaarTekst
  while @@fetch_status=0
  begin
    set @tekst = '<commentaar>' + @commentaarTekst + '</commentaar>' + char(13) + char(10)
    fetch next from deCursor into @commentaarTekst
  end
  updatetext vakrapportXML.XMLtekst @@ptrval null 0 @tekst
  deallocate deCursor
  set @tekst = ''
end
-- De tag vak wordt afgesloten

set @tekst = @tekst + '</' + lower(@vak) + '>' + char(13) + char(10)


updatetext vakrapportXML.XMLtekst @@ptrval null 0 @tekst
set @tekst = ''
fetch next from vakCursor into @vak,@leraar
end

close vakCursor
deallocate vakCursor
set @tekst = @tekst + '</vakken></vakrapport>'
updatetext vakrapportXML.XMLtekst @@ptrval null 0 @tekst
set @tekst=''
--print 'einde ' + convert(varchar,getDate(),114)